package com.woniu.cloud.shopassembly.service.impl;

import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.baomidou.mybatisplus.core.conditions.update.UpdateWrapper;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.woniu.cloud.common.dto.Result;
import com.woniu.cloud.entity.TStoreGood;
import com.woniu.cloud.shopassembly.mapper.TGoodMapper;
import com.woniu.cloud.shopassembly.mapper.TStoreGoodMapper;
import com.woniu.cloud.shopassembly.service.ITStoreGoodService;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;

import javax.annotation.Resource;
import java.util.List;

/**
 * <p>
 * 店铺商品表 服务实现类
 * </p>
 *
 * @author hyy
 * @since 2021-09-22
 */
@Service
@Slf4j
public class TStoreGoodServiceImpl extends ServiceImpl<TStoreGoodMapper, TStoreGood> implements ITStoreGoodService {


    @Resource
    private TStoreGoodMapper storeGoodMapper;
    @Resource
    private ITStoreGoodService storeGoodService;

    @Override
    public TStoreGood updateRedis(Integer storeGoodId) {
        log.info("缓存修改->id:{}",storeGoodId);
        TStoreGood good = storeGoodMapper.selectById(storeGoodId);
        log.info("修改结果->{}",good);
        return good;
    }
    @Override
    public TStoreGood insertRedis(Integer storeGoodId) {
        TStoreGood good=new TStoreGood();
        log.info("缓存添加->id:{}",storeGoodId);
        good = storeGoodMapper.selectById(storeGoodId);
        log.info("缓存结果->{}",good);
        return good;
    }

    @Override
    public TStoreGood getStoreGoodByStoreGoodId(Integer storeGoodId) {
        log.info("正在查询->id:{}",storeGoodId);
        TStoreGood storeGood = storeGoodService.insertRedis(storeGoodId);
        return storeGood;
    }

    @Override
    public TStoreGood getStoreGoodByStoreGoodId(Integer storeGoodId, Integer storeGoodGoodId) {
        log.info("正在查询->id:{}",storeGoodId);
        QueryWrapper<TStoreGood> wrapper = new QueryWrapper<>();
        wrapper.eq("store_good_id",storeGoodId)
                .eq("store_good_good_id",storeGoodGoodId);

        List<TStoreGood> goods = storeGoodMapper.selectList(wrapper);
        log.info("缓存结果->{}",goods);
        return 0!=goods.size()?goods.get(0):null;
    }

    @Override
    public Result getStoreGoodByGoodName(String storeGoodName, Integer pageIndex) {
        log.info("正在查询->storeGoodName:{},pageIndex:{}", storeGoodName,pageIndex);
        IPage<TStoreGood> page = new Page<TStoreGood>(pageIndex,6);
        QueryWrapper<TStoreGood> wrapper = new QueryWrapper<>();
        wrapper.eq("store_good_name",storeGoodName);
        IPage storeGoodIPage = storeGoodMapper.selectPage(page,wrapper);
        log.info("查询结果->{}", storeGoodIPage);
        if (storeGoodIPage.getTotal()==0L) {
            return Result.fail("数据不存在",null);
        }
        return Result.success("数据存在",storeGoodIPage);
    }

    @Override
    public Result getStoreGoodByStoreGoodType(String storeGoodType, Integer pageIndex) {
        log.info("正在查询->storeGoodType:{},pageIndex:{}", storeGoodType,pageIndex);
        IPage<TStoreGood> page = new Page<TStoreGood>(pageIndex,6);
        QueryWrapper<TStoreGood> wrapper = new QueryWrapper<>();
        wrapper.like("store_good_type",storeGoodType);
        IPage storeGoodIPage = storeGoodMapper.selectPage(page,wrapper);
        log.info("查询结果->{}", storeGoodIPage);
        if (storeGoodIPage.getTotal()==0L) {
            return Result.fail("数据不存在",null);
        }
        return Result.success("数据存在",storeGoodIPage);
    }

    @Override
    public Result getStoreGoodTypeList() {
        log.info("正在查询->");
        QueryWrapper<TStoreGood> wrapper = new QueryWrapper<>();
        wrapper.groupBy("store_good_type").select("store_good_type");
        List typeList = storeGoodMapper.selectList(wrapper);
        log.info("查询结果->{}", typeList);
        if (0==typeList.size()) {
            return Result.fail("数据不存在",null);
        }
        return Result.success("数据存在",typeList);
    }

    @Override
    public Result insertGood(TStoreGood storeGood) {
        log.info("正在添加->storeGood:{}",storeGood);

        int isInsert = storeGoodMapper.insert(storeGood);
        if (1==isInsert) {
            log.info("添加成功->storeGood:{}",storeGood);
            storeGoodService.updateRedis(storeGood.getStoreGoodId());
            return Result.success("添加成功",null);
        }
        log.info("添加失败->");
        return Result.fail("添加失败",null);
    }

    @Override
    public Result updateStoreGood(TStoreGood storeGood) {
        log.info("正在修改->storeGood:{}",storeGood);
        UpdateWrapper<TStoreGood> wrapper = new UpdateWrapper<>();
        wrapper.eq("store_good_id",storeGood.getStoreGoodId())
                .set(""!=storeGood.getStoreGoodName(),"store_good_name",storeGood.getStoreGoodName())
                .set(0<=storeGood.getStoreGoodPrice(),"store_good_price",storeGood.getStoreGoodPrice())
                .set(""!=storeGood.getStoreGoodImage(),"store_good_image",storeGood.getStoreGoodImage())
                .set(""!=storeGood.getStoreGoodType(),"store_good_type",storeGood.getStoreGoodType())//类型暂不支持改动
                .set(""!=storeGood.getStoreGoodDetail(),"store_good_detail",storeGood.getStoreGoodDetail())
                .set(0<=storeGood.getStoreGoodStatus(),"store_good_status",storeGood.getStoreGoodStatus())
                .set(0<=storeGood.getStoreGoodNum(),"store_good_num",storeGood.getStoreGoodNum());
        int update = storeGoodMapper.update(null, wrapper);
        if (1==update) {
            log.info("修改成功->");
            storeGoodService.updateRedis(storeGood.getStoreGoodId());
            return Result.success("修改成功",null);
        }
        log.info("修改失败->");
        return Result.fail("修改失败",null);
    }

    @Override
    public Result updateStoreGoodNumByStoreGoodId(Integer storeGoodId, Integer storeGoodNum) {
        log.info("正在修改->storeGoodId:{},goodNum:{}",storeGoodId,storeGoodNum);
        UpdateWrapper<TStoreGood> wrapper = new UpdateWrapper<>();
        wrapper.eq("store_good_id",storeGoodId)
                .setSql("store_good_num=store_good_num +"+storeGoodNum);
        int update = storeGoodMapper.update(null, wrapper);
        if (1==update) {
            log.info("修改成功->");
            storeGoodService.updateRedis(storeGoodId);
            return Result.success("修改成功",null);
        }
        log.info("修改失败->");
        return Result.fail("修改失败",null);
    }

    @Override
    public Result updateStoreGoodSellNumByStoreGoodId(Integer storeGoodId, Integer storeGoodSellNum) {
        log.info("正在修改->storeGoodId:{},goodNum:{}",storeGoodId,storeGoodSellNum);
        UpdateWrapper<TStoreGood> wrapper = new UpdateWrapper<>();
        wrapper.eq("store_good_id",storeGoodId)
                .setSql("store_good_sell_num=store_good_sell_num -"+storeGoodSellNum);
        int update = storeGoodMapper.update(null,wrapper);
        if (1==update) {
            log.info("修改成功->");
            storeGoodService.updateRedis(storeGoodId);
            return Result.success("修改成功",null);
        }
        log.info("修改失败->");
        return Result.fail("修改失败",null);
    }

    @Override
    public Result deleteStoreGoodByStoreGoodId(Integer storeGoodId) {
        log.info("正在删除->storeGoodId:{}",storeGoodId);
        int isDelete = storeGoodMapper.deleteById(storeGoodId);
        if (1==isDelete) {
            log.info("删除成功->");
            storeGoodService.updateRedis(storeGoodId);
            return Result.success("删除成功",null);
        }
        log.info("删除失败->");
        return Result.fail("删除失败",null);
    }
}
